
import wxApi from "../../utils/wxApi";

Page({


  data: {
    //存放用户地址信息
    address: {},
    //购物车数据
    cart: [],
    //是否全选
    allChecked: false,
    //总价格
    totalPrice: 0,
    //总数量
    totalNum: 0
  },

  
  onShow: function () {
    let address = wx.getStorageSync('address') || {};
    this.setData({
      address
    });
    let cart = wx.getStorageSync('cart') || [];
    this.updateCart(cart)

    /**
     * 实现全选的逻辑
     * 0. 定义一个全局变量 来表示购物车中的数据是否被全选
     *  1.根据购物车中的商品数据信息 如果商品的checked都为true就是全选 否则不用处理
     */
    //数组的every方法 遍历所有数据, 方法接受一个回调函数为参数, 这个回调函数的返回值必须为布尔类型,当所有回调函数的返回值都为true的时候 every方法 返回true; 
    // every方法的性能问题: 如果循环中出现一个不符合条件的值,那么将停止循环,然后直接返回false
    // let allChecked = true;
    // let allChecked = cart.every(item=>item.checked);
    /**
     * 实现总价格和总数量合计逻辑
     * 1. 遍历购物车数组
     * 2. 判断商品是否被选中 如果被选中才参与计算
     * 3. 总价格 += 商品的单价 * 数量
     * 4. 总数量 += 商品的数量 
     */
    //总价格,总数量
    // let totalPrice = 0;
    // let totalNum = 0;
    // cart.forEach(item=>{
    //   if(item.checked){
    //     totalPrice += item.goods_price * item.num;
    //     totalNum += item.num;
    //   }else{
    //     allChecked = false;
    //   }
    // });
    // allChecked = cart.length?allChecked:false
    // this.setData({
    //   address,cart,allChecked,totalPrice,totalNum
    // })
  },

  //更新购物车状态
  updateCart(cart) {
    let allChecked = true;
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach(item => {
      if (item.checked) {
        totalPrice += item.goods_price * item.num;
        totalNum += item.num;
      } else {
        allChecked = false;
      }
    });
    allChecked = cart.length ? allChecked : false
    this.setData({
      cart,
      allChecked,
      totalPrice,
      totalNum
    });
    //更新到缓存中
    wx.setStorageSync('cart', cart)
  },

 
  onItemCheckChange(e) {
  
    let goodsId = e.currentTarget.dataset.id;
   
    let {
      cart
    } = this.data;
    let index = cart.findIndex(item => item.goods_id === goodsId);
    let curGoods = cart[index];
    curGoods.checked = !curGoods.checked;
    //重新计算是否全选 和价格合计 以及数量合计
    this.updateCart(cart)
  },

  // 全选按钮回调函数
  onAllCheckClick(e) {
    console.log(e);
    let {
      allChecked,
      cart
    } = this.data;
    allChecked = !allChecked;
    cart.forEach(item => item.checked = allChecked)
    this.updateCart(cart)
  },
  // 商品加减
  handleItemNumEdit(e) {
    console.log(e);
    let {
      id,
      num
    } = e.currentTarget.dataset
    let {
      cart
    } = this.data
    let index = cart.findIndex(item => item.goods_id === id)
    let goodsInfo = cart[index]
    if (goodsInfo.num === 1 && num === -1) {
      wx.showModal({
        title: '提示',
        content: '是否要移出此商品',
        success: (res) => {
          if (res.confirm) {
            cart.splice(index, 1)
            this.updateCart(cart)
          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        }
      })
    } else {
      goodsInfo.num += num
      this.updateCart(cart)
    }

  },
  // 点击结算按钮
  onPayClick: async function () {
    let {
      address,
      totalNum
    } = this.data
    if (!address.userName) {
      return await wxApi.showToast("请选择收货地址")
    }
    if (!totalNum) {
      return await wxApi.showToast("还没有选择商品")
    }
    wx.navigateTo({
      url: '/pages/pay/pay'
    })
  },
  //获取收货地址
  getAddress: async function () {
    console.log("settings", wxApi)
    try {
      let settings = await wxApi.getSetting();
      let addressSuccess = settings.authSetting["scope.address"]
      if (!addressSuccess) await wxApi.openSetting();
      let address = await wxApi.chooseAddress();
      console.log("地址", address);
      address.all = address.provinceName + address.cityName + address.countyName + address.detailInfo;
      wx.setStorageSync('address', address);
      this.setData({
        address
      })

    } catch (err) {
      console.log(err)
    }
  }

})